// 题意：
//
// 题解：good。构造好题。
//
// run: $exec < input
#include <iostream>
#include <functional>
#include <utility>
#include <algorithm>
#include <vector>

int main()
{
	int n, sum = 0;
	std::cin >> n;
	std::vector<std::pair<int, int> > da(n);
	for (int i = 0; i < n; i++) {
		std::cin >> da[i].first;
		sum += da[i].first;
		da[i].second = i + 1;
	}

	std::sort(da.begin(), da.end(), std::greater<std::pair<int, int> >());

	int tot = sum/2;
	std::vector<std::pair<int, int> > ans(tot);
	std::cout << tot << '\n';
	int l = 0;
	for (int i = 0; i < tot; i++) {
		if (da[l].first > 1) {
			ans[i].first = da[l].second;
			da[l].first--;
		} else {
			ans[i].second = da[l].second;   da[l].first--;
			ans[i].first = da[++l].second; da[l].first--;
		}
	}
	for (int i = 0; i < tot; i++) {
		if (ans[i].second) continue;
		ans[i].second = da[l].second;
		da[l].first--;
		if (!da[l].first) l++;
	}

	for (int i = 0; i < tot; i++)
		std::cout << ans[i].first << ' ' << ans[i].second << '\n';
}

